From b8733873203fb2e3f2b1358bc701b5c8956c118a Mon Sep 17 00:00:00 2001 From: "Karl O. Pinc" Date: Thu, 10 Oct 2024 13:28:31 -0500 Subject: [PATCH] Add feature to upload missing column values as NULL --- src/pgwui_upload_core/check_settings.py | 2 ++ src/pgwui_upload_core/templates/upload.mak | 19 +++++++++++++++++++ src/pgwui_upload_core/views/upload.py | 15 +++++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/pgwui_upload_core/check_settings.py b/src/pgwui_upload_core/check_settings.py index a5743e8..2d4da73 100644 --- a/src/pgwui_upload_core/check_settings.py +++ b/src/pgwui_upload_core/check_settings.py @@ -38,12 +38,14 @@ UPLOAD_SETTINGS = CORE_UPLOAD_SETTINGS.copy() UPLOAD_SETTINGS.append('trim') UPLOAD_SETTINGS.append('null') UPLOAD_SETTINGS.append('literal_column_headings') +UPLOAD_SETTINGS.append('add_missing_columns') REQUIRED_SETTINGS = CORE_REQUIRED_SETTINGS BOOLEAN_SETTINGS = CORE_BOOLEAN_SETTINGS BOOLEAN_CHOICE_SETTINGS = ['trim', 'null', + 'add_missing_columns', 'literal_column_headings'] diff --git a/src/pgwui_upload_core/templates/upload.mak b/src/pgwui_upload_core/templates/upload.mak index 70b7370..69e1825 100644 --- a/src/pgwui_upload_core/templates/upload.mak +++ b/src/pgwui_upload_core/templates/upload.mak @@ -168,6 +168,24 @@ % endif +<%def name="add_missing_columns_row(tab_index)"> + % if show_choice(pgwui, 'add_missing_columns'): + + <%self.lib:td_label for_id="add_missing_columns_id"> + Add Missing Columns + + <%self.lib:td_input tab_index="${tab_index}"> + + + + % endif + + <%def name="submit(tab_index)"> <% tab_index.inc() %> @@ -180,6 +198,7 @@ format_row(tab_index) nulls_row(tab_index) trim_row(tab_index) + add_missing_columns_row(tab_index) literal_row(tab_index) file_row(tab_index) %> diff --git a/src/pgwui_upload_core/views/upload.py b/src/pgwui_upload_core/views/upload.py index 17a4522..1116663 100644 --- a/src/pgwui_upload_core/views/upload.py +++ b/src/pgwui_upload_core/views/upload.py @@ -78,6 +78,8 @@ class UploadCoreInitialPost(pgwui_core.forms.UploadNullFileInitialPost): self.upload_fmt = self.find_upload_fmt(upload_settings) self.upload_null = self.boolean_choice(upload_settings, 'null') self.trim_upload = self.boolean_choice(upload_settings, 'trim') + self.add_missing_columns = self.boolean_choice( + upload_settings, 'add_missing_columns') self.literal_col_headings = self.boolean_choice( upload_settings, 'literal_column_headings') return self @@ -370,7 +372,8 @@ def set_upload_response(component, request, response): response['pgwui']['upload_settings'] = upload_settings -def match_insert_to_dataline(udl, insert_stmt, source_file=None): +def match_insert_to_dataline( + udl, insert_stmt, add_missing_columns, source_file=None): '''Make sure the UploadDataLine has the number of values expected by the insert statement ''' @@ -390,6 +393,10 @@ def match_insert_to_dataline(udl, insert_stmt, source_file=None): udl.lineno, 'Too many data columns', descr=descr, detail=detail, data=udl.raw) else: - raise core_ex.TooFewColsError( - udl.lineno, 'Too few data columns', descr=descr, - detail=detail, data=udl.raw) + if add_missing_columns: + udl.tuples.extend([None for pos in + range(insert_stmt.cols - data_cols)]) + else: + raise core_ex.TooFewColsError( + udl.lineno, 'Too few data columns', descr=descr, + detail=detail, data=udl.raw) -- 2.34.1